/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package util;

import java.sql.Date;
import java.text.SimpleDateFormat;
import javax.swing.text.MaskFormatter;

/**
 *
 * @author Alberto
 */
public class Util {

    /**
     *
     * @param texto
     * @return
     */
    public static boolean verificaData(String data) {
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
        sdf.setLenient(false);
        try {
            sdf.parse(data);
            return true;
        } catch (Exception ex) {
            return false;
        }
    }

    /**
     * Método que ira validar o cpf
     * @param strCpf
     * @return 
     */
    public static boolean validarcpf(String cpfNum) { // formato XXX.XXX.XXX-XX  
        cpfNum = cpfNum.replaceAll("[^0-9]", cpfNum);
        if (cpfNum.length() != 11) {
            return false;
        }

        int[] cpf = new int[cpfNum.length()]; //define o valor com o tamanho da string  
        int resultP = 0;
        int resultS = 0;

        //converte a string para um array de integer  
        for (int i = 0; i < cpf.length; i++) {
            cpf[i] = Integer.parseInt(cpfNum.substring(i, i + 1));
        }

        //calcula o primeiro número(DIV) do cpf  
        for (int i = 0; i < 9; i++) {
            resultP += cpf[i] * (i + 1);
        }
        int divP = resultP % 11;

        //se o resultado for diferente ao 10º digito do cpf retorna falso  
        if (divP != cpf[9]) {
            return false;
        } else {
            //calcula o segundo número(DIV) do cpf  
            for (int i = 0; i < 10; i++) {
                resultS += cpf[i] * (i);
            }
            int divS = resultS % 11;

            //se o resultado for diferente ao 11º digito do cpf retorna falso  
            if (divS != cpf[10]) {
                return false;
            }
        }

        //se tudo estiver ok retorna verdadeiro  
        return true;
    }

    /**
     * Método que ira validar o cnpj
     * 
     * @param  cnpj
     * @return 
     */
    public static boolean validarCpnj(String cnpj) {
          boolean ret = false;  
          String base = "00000000000000";  
          if (cnpj.length() <= 14) {  
             if (cnpj.length() < 14) {  
                cnpj = base.substring(0, 14 - cnpj.length()) + cnpj;  
             }  

             int soma = 0;  
             int dig = 0;  
             String cnpj_calc = cnpj.substring(0, 12);  
             char[] chr_cnpj = cnpj.toCharArray();  
             // Primeira parte  
             for (int i = 0; i < 4; i++)  
                if (chr_cnpj[i] - 48 >= 0 && chr_cnpj[i] - 48 <= 9)  
                   soma += (chr_cnpj[i] - 48) * (6 - (i + 1));  
             for (int i = 0; i < 8; i++)  
                if (chr_cnpj[i + 4] - 48 >= 0 && chr_cnpj[i + 4] - 48 <= 9)  
                   soma += (chr_cnpj[i + 4] - 48) * (10 - (i + 1));  
             dig = 11 - (soma % 11);  
             cnpj_calc += (dig == 10 || dig == 11) ? "0" : Integer.toString(dig);  
             // Segunda parte  
             soma = 0;  
             for (int i = 0; i < 5; i++)  
                if (chr_cnpj[i] - 48 >= 0 && chr_cnpj[i] - 48 <= 9)  
                   soma += (chr_cnpj[i] - 48) * (7 - (i + 1));  
             for (int i = 0; i < 8; i++)  
                if (chr_cnpj[i + 5] - 48 >= 0 && chr_cnpj[i + 5] - 48 <= 9)  
                   soma += (chr_cnpj[i + 5] - 48) * (10 - (i + 1));  
             dig = 11 - (soma % 11);  
             cnpj_calc += (dig == 10 || dig == 11) ? "0" : Integer.toString(dig);  
             ret = cnpj.equals(cnpj_calc);  

          }  
          if (ret) {  
             System.out.println("O CNPJ [" + cnpj + "] é   válido.");  
          } else {  
             System.out.println("O CNPJ [" + cnpj + "] é inválido.");  
          }  
          return ret;  
    }

    /**
     * Nétodo que ira criar uma mascará
     * 
     * @param String Mascara
     * @return MaskFormatter
     */
    public static MaskFormatter setMascara(String mascara){  
      MaskFormatter mask = null;  
      try{  
         mask = new MaskFormatter(mascara);                    
         }catch(java.text.ParseException ex){}  
      return mask;  
   }  
    
    /**
     * Método que ira Formatar a data para o formato de banco
     * 
     * @param String data
     * @return data
     */
    public static String formatarDataBanco(String data){
        // Explodindo a data pelo seu separador
        String[] arrData = data.split("/");
        // Formatando a data
        data = arrData[2]+"-"+arrData[1]+"-"+arrData[0];
        
        // Retornando a data formatada
        return data;
    }
    
    /**
     * Método que ira Formatar a data para o formato de banco
     * 
     * @param String data
     * @return data
     */
    public static String formatarBancoData(String data){
        // Explodindo a data pelo seu separador
        String[] arrData = data.split("-");
        // Formatando a data
        data = arrData[2]+"/"+arrData[1]+"/"+arrData[0];
        
        // Retornando a data formatada
        return data;
    }
    
    public static String getDataAtual(){
        Date data = new Date(System.currentTimeMillis());    
        SimpleDateFormat formatarDate = new SimpleDateFormat("dd/MM/yyyy");
        
        return formatarDate.format(data);
    }
    
//    public static formataValor(String valor){
//        if(valor.length() == 2)
//            
//        
//        
//    }
//    
}
